let path = require('path');
let html = require('html-webpack-plugin');
let { CleanWebpackPlugin } = require('clean-webpack-plugin')
let webpack = require('webpack')
let happy = require('happypack')
let MyPlugin = require('../myplugin.js')
module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'index.[hash:4].js',
    path: path.resolve(__dirname, '../dist')
  },
  resolveLoader:{
    // 告诉webapck  加载loader先去../ 查找， 没有再去node_modules
    modules:['node_modules','./']
  },
  module: {
    noParse: /jquery|lodash/,// 告诉webpack  不用取解析 jquery中的依赖了
    rules: [
      // {
      //   test:/\.js$/,
      //   use:'happypack/loader?id=myjs',
      //   exclude:/node_modules/
      // }
      {
        test: /\.js$/,
        use: ['thread-loader','myloader',
          {
            loader: 'babel-loader',
            options: {
              presets: [
                '@babel/preset-env'
              ]
            }
          }
        ],
        exclude: /node_modules/
      }
    ]
  },
  plugins: [
    // new happy({
    //   id:'myjs',
    //   use:[
    //     {
    //       loader:'babel-loader',
    //       options:{
    //         presets:[
    //           '@babel/preset-env'
    //         ]
    //       }
    //     }
    //   ]
    // }),
    new MyPlugin(),
    new webpack.DllReferencePlugin({
      //打包编译的时候  先去这个清单中 查找 ；清单中没有 再去进行打包；
      manifest: path.resolve(__dirname, '../dist', 'manifest.json')
    }),
    new CleanWebpackPlugin({
      //告诉这个插件 不用清除这些文件 
      cleanOnceBeforeBuildPatterns: ['**/*', '!dll_*', '!mani*']
    }),
    new html({
      template: './public/index.html',
      filename: "index.html",

    }),
    new webpack.ProvidePlugin({
      '$$$$': 'jquery',// 前边的这个名字 我们可以自己定义， 定义的啥 在使用的时候就用啥； 后边的是包的名字
      'React': 'react'
    }),
    new webpack.IgnorePlugin(/\.\/locale$/, /moment$/) // 告诉webpack 忽略 moment中引入 local下的内容
  ]
}